/*
 * Copyright (c) 2011 Nokia Corporation.
 */

#ifndef LEVELDATA_H
#define LEVELDATA_H

#include <QMetaType>
#if defined(IAP_ENABLED)
#include <iapclient.h>
#endif
/***************************************************************************************************
*The value used to identify invalid level data.                                                    *
***************************************************************************************************/
#define LEVEL_INVALID "__INVALID_LEVEL__"
/***************************************************************************************************
*Structure representing a purchasable items data.                                                  *
***************************************************************************************************/
struct LevelData
{
    /***********************************************************************************************
    *Purchasable items Id.                                                                         *
    ***********************************************************************************************/
    QString id;
    /***********************************************************************************************
    *Purchasable items name.                                                                       *
    ***********************************************************************************************/
    QString name;
    /***********************************************************************************************
    *Purchasable items type. Possible values: Level,Theme, LEVEL_INVALID.                          *
    ***********************************************************************************************/
    QString type;
    /***********************************************************************************************
    *The items IAP data.                                                                           *
    ***********************************************************************************************/
#if defined(IAP_ENABLED)
    IAPClient::ProductData data;
#endif
    /***********************************************************************************************
    *The items unlocked sate.                                                                      *
    ***********************************************************************************************/
    bool unlocked;

    /***********************************************************************************************
    *The default constructor, produces invalid level data.                                         *
    ***********************************************************************************************/
    LevelData()
        :id(LEVEL_INVALID),name(LEVEL_INVALID),type(LEVEL_INVALID),
#if defined(IAP_ENABLED)
          data(IAPClient::ProductData()),
#endif
          unlocked(false)
    {}

    /***********************************************************************************************
    *A convenience constructor.                                                                    *
    ***********************************************************************************************/
    LevelData(QString id_,QString name_,QString type_,
#if defined(IAP_ENABLED)
              IAPClient::ProductData data_,
#endif
              bool unlocked_)
        :id(id_),name(name_),type(type_),
#if defined(IAP_ENABLED)
          data(data_),
#endif
          unlocked(unlocked_)
    {}

    /***********************************************************************************************
    *A copy constructor.                                                                           *
    ***********************************************************************************************/
    LevelData(const LevelData& other)
        :id(other.id),name(other.name),type(other.type),
#if defined(IAP_ENABLED)
          data(other.data),
#endif
          unlocked(other.unlocked)
    {}

    /***********************************************************************************************
    *The == operator, the only thing identifying the item is its Id.                               *
    ***********************************************************************************************/
    bool operator == (const LevelData& other)
    {
        return id == other.id;
    }
};

#endif // LEVELDATA_H
